package logic;

import java.io.File;
import javax.swing.JScrollBar;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import entity.DefinedRuntimeException;
import static view.Door.dir;
import static view.Door.running;

/**
 * 批量重命名文件.
 * @author Rex
 *
 */
public class Rename {
	
	/**
	 * 批量重命名文件.
	 * @param input
	 * @param msg
	 * @param bar 
	 */
	public static void action(JTextField input, JTextArea msg, JScrollBar bar) {
		try {
			if (!running) {
				if (dir != null) {
					msg.append("请稍候……");
					running = true;
					new Thread(() -> Rename.startup(input, msg, bar)).start();
				}
			} else {
				msg.append("程序正在执行，请勿重复点击");
			}
		} catch (Exception e) {
			msg.setText("未知的异常");
			new DefinedRuntimeException("未知的异常", e);
		} finally {
			// 拖动滚动条至最后一行
			bar.setValue(bar.getMaximum());
		}
	}

	private static void startup(JTextField input, JTextArea msg, JScrollBar bar) {
		String str = "批量重命名完成";
		try {
			//获取关键字
			String key = input.getText();
			if ("请输入要插入的关键字".equals(key) || key == null) {
				key = "";
			}
			
			String newName = dir.toString().concat(File.separator).concat(key);
			
			// 第一次重命名，为所有文件指定一个临时名称
			int times = 1;
			String temp = newName.concat("t");
			for (File f : dir.listFiles()) {
				if (f.isFile()) {
					String fileName = f.getName();
					if (fileName.contains(".")) {
						f.renameTo(new File(
								temp + times + fileName.substring(fileName.lastIndexOf("."), fileName.length())));// 重命名
					} else {// 若文件不含拓展名
						f.renameTo(new File(temp + times));// 重命名
					}
					times++;
				}
			}
			
			// 第二次重命名，正式重命名文件
			times = 1;
			for (File f : dir.listFiles()) {
				if (f.isFile()) {
					String fileName = f.getName();
					if (fileName.contains(".")) {
						f.renameTo(new File(
								newName + times + fileName.substring(fileName.lastIndexOf("."), fileName.length())));// 重命名
					} else {// 若文件不含拓展名
						f.renameTo(new File(newName + times));// 重命名
					}
					times++;
				}
			}
			
		} catch (Exception e) {
			str = "遭遇未知异常";
			new DefinedRuntimeException(str, e);
		} finally {
			msg.append(str);
			running = false;
			// 拖动滚动条至最后一行
			bar.setValue(bar.getMaximum());
		}
	}
	
}